/**
 * Copyright (C) 2010 Cloudfarming <info@cloudfarming.nl>
 *
 * Licensed under the Eclipse Public License - v 1.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *         http://www.eclipse.org/legal/epl-v10.html
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package nl.cloudfarming.client.planning.tactical.wizard.common;

import java.awt.Component;
import java.util.Date;
import javax.swing.event.ChangeListener;
import nl.cloudfarming.client.planning.tactical.TacticalPlanningModule;
import org.openide.WizardDescriptor;
import org.openide.WizardValidationException;
import org.openide.util.HelpCtx;
import org.openide.util.NbBundle;

public class PlandateController implements WizardDescriptor.ValidatingPanel {

    public static final String PLANDATE = "plandate";
    private final String INVALID_PLANDATE_MESSAGE = NbBundle.getMessage(TacticalPlanningModule.class, "field_plan.wizard.common.plandate_panel.validation.invalid_plandate_message");
    /**
     * The visual component that displays this panel. If you need to access the
     * component from this class, just use getComponent().
     */
    private PlandatePanel component;
    private boolean isValid = true;

    // Get the visual component for the panel. In this template, the component
    // is kept separate. This can be more efficient: if the wizard is created
    // but never displayed, or not all panels are displayed, it is better to
    // create only those which really need to be visible.
    @Override
    public Component getComponent() {
        if (component == null) {
            component = new PlandatePanel();
        }
        return component;
    }

    @Override
    public HelpCtx getHelp() {
        // Show no Help button for this panel:
        return HelpCtx.DEFAULT_HELP;
        // If you have context help:
        // return new HelpCtx(SampleWizardPanel1.class);
    }

    @Override
    public boolean isValid() {
        return isValid;
    }

    @Override
    public final void addChangeListener(ChangeListener l) {
    }

    @Override
    public final void removeChangeListener(ChangeListener l) {
    }
    

    // You can use a settings object to keep track of state. Normally the
    // settings object will be the WizardDescriptor, so you can use
    // WizardDescriptor.getProperty & putProperty to store information entered
    // by the user.
    @Override
    public void readSettings(Object settings) {
    }

    @Override
    public void storeSettings(Object settings) {

        Date planDate = component.getPlanDate();

        if (planDate != null) {
            ((WizardDescriptor) settings).putProperty(PLANDATE, planDate);
        }



    }

    @Override
    public void validate() throws WizardValidationException {
        
        
        Date planDate = component.getPlanDate();
        if (planDate == null) {
            throw new WizardValidationException(null, INVALID_PLANDATE_MESSAGE, null);
        }
    }
}
